home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 24
/
AACD 24.iso
/
AACD
/
Programming
/
2b_CreativE
/
src
/
internal1.s
< prev
next >
Wrap
Text File
|
2001-01-29
|
6KB
|
327 lines
;;VAR
NUMBUFS = 4
BUFADD: DC.L MINIMUM_ACODE
FIXED = 0
REALLOCATABLE = 1
EXPANDABLE = 2
BTAB: DC.L CURINTERIM,.1,REALLOCATABLE
DC.L CURACODE,.3,FIXED
DC.L HEAP,.5,EXPANDABLE
DC.L LABM,.6,REALLOCATABLE
.1: DC.B "intermediate code",0
.3: DC.B "libraries/generated code",0
.5: DC.B "general/identifier",0
.6: DC.B "label",0
EVEN
DEBUGDATA:
DC.L OLIST
DC.L PROCLIST
DC.L IDENTHASH
DBUGV:
DC.L 0
DBUGA:
DC.L 0
DC.L MODINFOLIST
DC.L CODELIST
DC.L MEMLIST
DC.L HEAP
DC.L MACROHASH
INITBUFFERS:
MOVE.W #1,CURSPOT
MOVE.L EBUFSIZE,D0
LSR.L #1,D0 ; *1.5+50k
ADD.L EBUFSIZE,D0
ADD.L BUFADD(PC),D0
MOVE.L D0,CURACODE+20
BSR REALLOC1
BSR ALLOC3
BSR ALLOC5
BSR REALLOC6
MOVE.L HEAP+20,GENERALSIZE
RTS
REALLOC1:
MOVEM.L D6/A5,-(A7)
LEA CURINTERIM,A5
BSR REALLOC
MOVEM.L (A7)+,D6/A5
RTS
ALLOC3:
MOVEM.L D6/A5,-(A7)
LEA CURACODE,A5
BSR REALLOC
MOVEM.L (A7)+,D6/A5
RTS
CHECK3:
MOVEM.L D6/A5,-(A7)
LEA CURACODE,A5
BSR CHECK
MOVEM.L (A7)+,D6/A5
RTS
ALLOC5:
MOVEM.L D6/A5,-(A7)
LEA HEAP,A5
BSR REALLOC
MOVEM.L (A7)+,D6/A5
RTS
EXPAND5:
MOVEM.L D6/A5,-(A7)
LEA HEAP,A5
BSR EXPANDBUF
MOVEM.L (A7)+,D6/A5
RTS
REALLOC6:
MOVEM.L D6/A5,-(A7)
LEA LABM,A5
BSR REALLOC
MOVEM.L (A7)+,D6/A5
RTS
COOKIE = $BE
NEW:
MOVEM.L D1/D2/A0/A1/A6,-(A7) ; SIZE-->D0-->ADDR
ADDQ.L #8,D0
ADDQ.L #1,D0
MOVE.L D0,D2
MOVEQ #0,D1
MOVE.L 4.W,A6
JSR -198(A6)
TST.L D0
BEQ.S .EXX
MOVE.L D0,A0
ADDQ.L #8,D0
MOVE.B #COOKIE,-1(A0,D2.L)
MOVE.L MEMLIST(PC),(A0)
MOVE.L D2,4(A0)
MOVE.L A0,MEMLIST
.EXX: MOVEM.L (A7)+,D1/D2/A0/A1/A6
RTS
MEMLIST: DC.L 0
DISPOSE: ; ADR-->D0
MOVEM.L D0/D1/A0/A1/A2/A6,-(A7)
TST.L D0
BEQ.S .1
SUBQ.L #8,D0
LEA MEMLIST(PC),A1
.XL:MOVE.L (A1),D1
BEQ.S .1
MOVE.L A1,A2 ; ADR TO LINK BACK TO
MOVE.L D1,A1
CMP.L D1,D0
BNE.S .XL
MOVE.L 4(A1),D0 ; MEMSIZE
MOVE.L (A1),(A2) ; LINK BACK
MOVE.L 4.W,A6
JSR -210(A6)
.1: MOVEM.L (A7)+,D0/D1/A0/A1/A2/A6
RTS
REALLOC: ; CALLED FROM EVERYWHERE
MOVE.L 8(A5),D6
ADD.L 12(A5),D6
SUB.L 16(A5),D6
CMP.L (A5),D6
BMI.S .1
RTS
.1: MOVEM.L D0/D1/D7/A0/A1/A6,-(A7)
MOVE.L 12(A5),D0
ADD.L 20(A5),D0 ; NEW SIZE
MOVE.L D0,D6 ; D6=SIZE
BSR NEW
TST.L D0
BEQ.S .ER
MOVE.L D0,D7 ; D7=ADR
TST.L 12(A5)
BEQ.S .2 ; NO COPYING/FREEMEM
MOVE.L D7,A1
MOVE.L 8(A5),A0
MOVE.L 12(A5),D0
MOVE.L 4.W,A6
JSR -630(A6) ; COPYMEMQUICK
MOVE.L 8(A5),D0
BSR DISPOSE
.2: TST.L (A5) ; NEW SETTINGS
BNE.S .3
MOVE.L D7,(A5)
BRA.S .4
.3: MOVE.L (A5),D0
SUB.L 8(A5),D0
ADD.L D7,D0
MOVE.L D0,(A5)
.4: MOVE.L D7,8(A5)
MOVE.L D6,12(A5)
MOVEM.L (A7)+,D0/D1/D7/A0/A1/A6
RTS
.ER: MOVEM.L (A7)+,D0/D1/D7/A0/A1/A6
BRA iERROR38
CHECK:
MOVE.L 8(A5),D6
ADD.L 12(A5),D6
SUB.L 16(A5),D6
CMP.L (A5),D6
BMI iERROR37
RTS
EXPANDBUF:
MOVE.L 8(A5),D6
ADD.L 12(A5),D6
SUB.L 16(A5),D6
CMP.L (A5),D6
BMI .1
RTS
.1: MOVE.L D0,-(A7)
MOVE.L 20(A5),D0
MOVE.L D0,12(A5)
ADD.L D0,GENERALSIZE
BSR NEW
TST.L D0
BEQ iERROR38
MOVE.L D0,(A5)
MOVE.L D0,8(A5)
MOVE.L (A7)+,D0
RTS
FREEBUFFERS:
MOVE.L 4.W,A6
MOVE.L MEMLIST(PC),A2
.XL:MOVE.L A2,D0
BEQ.S .X
MOVE.L A2,A1
MOVE.L 4(A2),D0
MOVE.L (A2),A2
JSR -210(A6)
BRA.S .XL
.X: CLR.L MEMLIST
RTS
CHECKCOOKIES:
MOVE.L 4.W,A6
MOVE.L MEMLIST(PC),A2
.XL:MOVE.L A2,D0
BEQ.S .X
MOVE.L A2,A1
MOVE.L 4(A2),D0
MOVE.L (A2),A2
CMPI.B #COOKIE,-1(A1,D0.L)
BEQ.S .1
ADDQ.W #1,BUFSPOT
CLR.L MEMLIST ; BECAUSE OF CORRUPTED POINTERS?
BRA.S .X
.1: BRA.S .XL
.X: TST.W BUFSPOT
BEQ .x
JMP DAMAGEDCOOKIES
.x: RTS
SWAPVALUES:
JSR FIXOBJTYPES
MOVE.L ACODE,CURACODE
BSR GETLINEBUF
RTS
GETLINEBUF:
BTST #5,CODEPREFS+1
BEQ.S .1
MOVEQ #0,D0
MOVE.W MAXLINENUM(PC),D0
LSL.L #3,D0
ADD.L #1000,D0
BSR NEW
TST.L D0
BEQ iERROR38
MOVE.L D0,LINEBUF
MOVE.L D0,A0
MOVE.L #$3F1,(A0)+ ; HUNKID
CLR.L (A0)+ ; HUNKLEN, _LATER_.
CLR.L (A0)+ ; ADD2HUNK=0
MOVE.L #"LINE",(A0)+
ADDQ.L #4,A0
MOVE.L A0,A2
MOVE.L #NAMEBUF,A1
.XL:MOVE.B (A1)+,(A0)+
BNE.S .XL
MOVE.B #".",-1(A0)
MOVE.B #"e",(A0)+
CLR.B (A0)+
CLR.B (A0)+
CLR.B (A0)+
MOVE.L A0,D0
SUB.L A2,D0
LSR.L #2,D0
MOVE.L D0,-4(A2)
LSL.L #2,D0
LEA 0(A2,D0.L),A0
MOVE.L A0,LINEBUFCUR
MOVE.L A0,LINEBUFCURSTART ; IF THE SAME LATER, DON'T SAVE
.1: RTS
ADDLINEDBG:
TST.W PROCF
BEQ.S .1
MOVEM.L D0/A0,-(A7)
MOVE.L LINEBUFCUR(PC),A0
MOVEQ #0,D0
MOVE.W LINENUM,D0
ADDQ.L #1,D0
MOVE.L D0,(A0)+
MOVE.L A4,D0
SUB.L ACODE,D0
MOVE.L D0,(A0)+
MOVE.L A0,LINEBUFCUR
BTST #6,CODEPREFS+1
BEQ.S .3
MOVE.W .2(PC),(A4)+ ; ADD A NOP
.3: MOVEM.L (A7)+,D0/A0
.1: RTS
.2: NOP
DEBUGLIST: DC.L 0
MAXLINENUM: DC.W 0
LINEBUF: DC.L 0
LINEBUFCUR: DC.L 0
LINEBUFCURSTART: DC.L 0
SETVARS:
MOVE.L #BRACKETSBUF,CURBRACK
MOVE.L #HASHBUFS,A0 ; CLEAR HASHTABLES
MOVE.L #ENDHASHBUFS,D0
SUB.L A0,D0
LSR.L #2,D0
SUBQ.L #1,D0
MOVEQ #0,D1
.CLR: MOVE.L D1,(A0)+
DBRA D0,.CLR
MOVE.L DIRNAMEX,A1 ; STD MODULE PATH
LEA STDDIR(PC),A0
.1: MOVE.B (A0)+,(A1)+
BNE.S .1
MOVE.W #-1,KILLFLAG ; FROM NOW, DELETE IF PROBLEMS
LEA SELFNAME(PC),A0
HASH A0,D0,D1
LSL.L #2,D0
ADD.L #IDENTHASH,D0
MOVE.L D0,SELFHASHADR
RTS
STDDIR:
DC.B 'emodules:',0
;*-*